package com.yo.yorpc;

import com.yo.yorpc.config.RpcConfig;
import com.yo.yorpc.constat.RpcConstant;
import lombok.extern.slf4j.Slf4j;
import com.yo.yorpc.utils.ConfigUtils;

@Slf4j
public class RPCApplication {
    private static volatile RpcConfig rpcConfig;

    /**
     * 框架初始化，支持传入自定义配置
     * @param newRpcConfig
     */
    public static void init(RpcConfig newRpcConfig) {
        rpcConfig = newRpcConfig;
        log.info("rpc init, config={}",newRpcConfig.serverPort);
    }

    /**
     * 初始化
     */
    public static void init(){
        RpcConfig newRpcConfig = new RpcConfig();
        try {
            newRpcConfig= ConfigUtils.loadConfig(RpcConfig.class, RpcConstant.DEFAULT_CONFIG_PREFIX);
        }catch (Exception e){
            newRpcConfig= new RpcConfig();
        }
        init(newRpcConfig);
    }

    /**
     * 获取配置
     * @return
     */
    public static RpcConfig getRpcConfig() {
        if (rpcConfig == null) {
            synchronized (RPCApplication.class) {
                if (rpcConfig == null) {
                    init();
                }
            }
        }
        return rpcConfig;
    }
}
